package Strategy;

import Fruit.Fruit;

import java.util.List;
import java.util.Objects;

/**
 * 策略抽象类
 */
public abstract class Strategy {
    /**
     * 默认计算策略（可重写）
     * @param fruits 要购买的水果列表
     * @return 总价格
     */
    public double compute(List<Fruit> fruits) {
        double sum = 0.0;
        for(Fruit fruit : fruits) {
            sum+= fruit.getUnitPrice() * fruit.getWeight();
        }
        return sum;
    };

    /**
     * 求和（不可重写）
     * @param fruits 要购买的水果列表
     * @return 总价格
     */
    public final double sum(List<Fruit> fruits) {
        if (Objects.isNull(fruits) || fruits.isEmpty()) return 0.0;
        double totalPrice;
        try {
            totalPrice = compute(fruits);
        } catch (Exception e) {
            throw new RuntimeException("策略配置出错:" + e.getMessage());
        }

        if (totalPrice<0) throw new RuntimeException("策略配置错误,总价不能为0");

        return totalPrice;
    };
}
